From: Andrew Cooper Date: Wed, 24 Apr 2019 18:10:58 +0000 (+0100) Subject: xen/arm: Misc improvements to do_common_cpu_on() X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~2275 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=117bab9d7a270df90c540e984da18739022ce11e;p=xen.git xen/arm: Misc improvements to do_common_cpu_on() * Use domain_vcpu() rather than opencoding the lookup. Amongst other things, domain_vcpu() is spectre-v1-safe. * Unlock the domain immediately after arch_set_info_guest() completes. There is no need for free_vcpu_guest_context() to be within the critical region, and moving the call simplifies the error case. No practical change in functionality. Signed-off-by: Andrew Cooper Reviewed-by: Julien Grall --- diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index 9f4e5b8844..c1e250be59 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -33,7 +33,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point, vcpuid = vaffinity_to_vcpuid(target_cpu); - if ( vcpuid >= d->max_vcpus || (v = d->vcpu[vcpuid]) == NULL ) + if ( (v = domain_vcpu(d, vcpuid)) == NULL ) return PSCI_INVALID_PARAMETERS; /* THUMB set is not allowed with 64-bit domain */ @@ -82,14 +82,12 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point, domain_lock(d); rc = arch_set_info_guest(v, ctxt); + domain_unlock(d); + free_vcpu_guest_context(ctxt); if ( rc < 0 ) - { - domain_unlock(d); return PSCI_DENIED; - } - domain_unlock(d); vcpu_wake(v);